library(tidyverse)
library(DESeq2)
Loading required package: SummarizedExperiment
Loading required package: Biobase
Welcome to Bioconductor
Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see 'citation("Biobase")', and for
packages 'citation("pkgname")'.
Loading required package: DelayedArray
Loading required package: matrixStats
Attaching package: ‘matrixStats’
The following objects are masked from ‘package:Biobase’:
anyMissing, rowMedians
The following object is masked from ‘package:dplyr’:
count
Attaching package: ‘DelayedArray’
The following objects are masked from ‘package:matrixStats’:
colMaxs, colMins, colRanges, rowMaxs, rowMins, rowRanges
The following object is masked from ‘package:purrr’:
simplify
The following objects are masked from ‘package:base’:
aperm, apply, rowsum
str(deseq.res)
tibble[,11] [1,229,844 × 11] (S3: tbl_df/tbl/data.frame)
$ samples : chr [1:1229844] "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" "E-MTAB-5801_intestinal organoid cell_unknown_unknown" ...
$ data : chr [1:1229844] "E-MTAB-5801" "E-MTAB-5801" "E-MTAB-5801" "E-MTAB-5801" ...
$ cell.type : chr [1:1229844] "intestinal organoid cell" "intestinal organoid cell" "intestinal organoid cell" "intestinal organoid cell" ...
$ condition : chr [1:1229844] "unknown" "unknown" "unknown" "unknown" ...
$ duration : chr [1:1229844] "unknown" "unknown" "unknown" "unknown" ...
$ gene_name : chr [1:1229844] "A1BG" "A1BG-AS1" "A1CF" "A2M" ...
$ baseMean : num [1:1229844] 300.9 22.9 40.5 3834.9 15 ...
$ log2FoldChange: num [1:1229844] 1.102 0.19 -0.434 0.55 1.353 ...
$ lfcSE : num [1:1229844] 0.311 0.434 0.455 0.325 0.628 ...
$ pvalue : num [1:1229844] 9.08e-05 5.58e-01 2.01e-01 4.85e-02 4.17e-03 ...
$ padj : num [1:1229844] 0.000901 0.721331 0.372606 0.133697 0.020512 ...
human orthologs
tf.hits <- read_xlsx("../data/83 direct targets that have human homologs.xlsx")
tf.hits <- tf.hits %>% filter(`Human Ortholog` != "N.A.") # Remove genes with no human orthologs
tf.hits$ENSG <- sapply(strsplit(tf.hits$`Human Ortholog`, " "), `[[`, 1)
ortho <- tf.hits %>%
select(ENSG) %>%
distinct()
genes.deseq <- counts %>%
select(GeneName) %>%
dplyr::rename(Gene = GeneName)
gene.id <- read_tsv("../../bono_hirota_2020/170704all_HN2.txt") %>%
select(ENSG_Gene) %>%
separate(ENSG_Gene, into = c("ENSG", "Gene"), sep = "_", extra = "merge")
── Column specification ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
cols(
Gene = col_character(),
ENSG_Gene = col_character(),
up = col_double(),
down = col_double(),
unchanged = col_double(),
ENSG = col_character()
)
final.ortho <- left_join(genes.deseq, gene.id, by = "Gene") %>%
left_join(ortho, ., by = "ENSG") %>%
filter(!is.na(Gene)) %>%
arrange(Gene)
Percentile of orthologs in gene expression changes
ecdf_fun <- function(data, genes) {
x <- data$log2FoldChange
perc <- data$log2FoldChange[data$gene_name %in% genes]
out <- ecdf(x)(perc)
names(out) <- genes
return(out)
}
perc.ortho <- deseq.res %>%
arrange(samples, gene_name) %>%
group_by(samples, data, cell.type, condition, duration) %>%
group_modify(~ ecdf_fun(data = ., genes = final.ortho$Gene) %>%
enframe(name = "Gene", value = "quantile"))
perc.ortho
write_csv(deseq.res, "../output/tables/human_hypoxia_diff_expression.csv")
write_csv(perc.ortho, "../output/tables/worm_orthologs_human_hypoxia_percentile.csv")
ggsave(ortho.perc.1, filename = "../output/plots/plot.dist.percentile.human.hypoxia.ortholog.pdf", width = 20, width = 15)
Error in ggsave(ortho.perc.1, filename = "../output/plots/plot.dist.percentile.human.hypoxia.ortholog.pdf", :
formal argument "width" matched by multiple actual arguments

d2$log2FoldChange[d2$gene_name %in% tf.hits$Gene]
[1] -0.6340042162 -0.4847606734 0.4008209642 0.9284774719 0.3298327834 0.3046531092 -0.0701485041 0.0702380192 2.6414492267 0.5894264176
[11] -0.4562827962 NA 0.4424907113 0.3474923137 0.6039854970 0.1346481612 -0.9838611492 -0.0585092028 0.1520630941 -0.8471345462
[21] 1.6557951532 -0.1560669252 0.1583966410 0.0626795270 -0.2705245078 1.2463932408 2.6147020635 -0.7370919100 NA 0.3446267084
[31] -0.0453977680 0.0230738121 0.5227303822 -0.7886389009 -0.4876244627 -0.2667928855 1.2102422833 -0.5751376161 -0.1396670677 -0.0202352322
[41] 1.0347071238 0.0787551924 -0.4957502529 0.0728409348 1.4650271564 1.2467574636 -0.1832625594 -0.4249405741 0.5153555739 0.7719156366
[51] -0.1813558034 0.7120998501 -0.1098651598 -1.0261033599 0.1213996863 0.3895775957 -0.1113627651 -0.8708226383 0.7892566743 1.0393256544
[61] -0.5920314148 -0.5309805455 -0.4309874442 0.3163425996 -1.5440490195 0.0468787005 -0.0599339729 -0.3554594223 NA 0.4534608765
[71] 0.8100612651 -2.3990929384 0.0533998202 -0.2760566162 -0.9769570598 0.0880490154 0.3246006110 0.2887232027 1.4793409517 0.0276997336
[81] -0.1673813595 0.0227486789 0.0817434106 -0.0286561226 -0.1928925648 -0.1734132930 NA 0.8397830419 0.4125961239 -0.0405944662
[91] 0.1462768324 -0.0044081293 -0.0295534300 0.0769579665 -0.0145938634 0.4804786029 -0.5630714040 -0.2807380489 NA 0.5678829380
[101] 1.9596354969 1.5987011724 0.9818420560 0.0395861165 0.8429977996 0.0323640228 NA 0.0918385997 -0.0932425623 -0.0762727290
[111] -0.5780491916 1.4255484614 0.7797726766 -0.2175382237 NA 0.3136171954 -0.2108914410 0.1583573886 -0.0433903160 4.7193823171
[121] 0.4639966448 -0.1554651074 -0.0719650807 -0.7484465994 -0.6053686532 NA 0.1677334858 -0.0265184498 0.1975917962 0.4829081285
[131] 0.0471757989 -0.0339932382 -0.9253257141 -1.0197092303 -0.3127778078 0.0776490069 0.0274952644 0.7169704571 0.0192536585 -0.2225965288
[141] 0.3592548936 -0.2198905462 -0.0120278018 NA 0.5288354402 1.4777660866 0.0568997766 -0.3974504300 -0.0151858080 -0.0873242104
[151] -0.0803811414 -0.0315879667 0.0071674036 1.2280225724 -0.0859522011 0.0749002737 NA -0.0317715237 0.0401367176 0.1422572645
[161] 0.0095073141 0.0117176276 0.3102562719 0.6443703162 0.0052074975 -0.0946178413 -0.1696457382 NA 0.0021181556 -0.0577364186
[171] 0.0082676792 -0.2438901343 -0.0074218710 -0.0086577512 0.0526978587 0.5025037959 2.0724212618 -0.3126445887 NA 0.3003504721
[181] 0.0096749045 NA 0.2668113691 0.0301962497 -0.1672391297 -0.0958203120 1.5820374290 0.0046289561 -0.1240085211 NA
[191] -0.0601615048 0.0667710632 -0.0284569981 0.0819307910 4.0582000628 0.0134896335 -0.0117701483 0.0047677866 -0.0220953669 -0.1606674227
[201] -0.0037035556 -0.0386710977 0.1452843425 -0.1466616537 -0.0945078118 0.0303299298 0.0863616821 -0.2326567078 -0.4705201862 -0.5634945275
[211] -0.1896452871 -0.0034247290 0.0532649664 NA -0.1442128159 0.0540719139 -0.2123576395 0.1210185773 -0.0086577512 0.1453999734
[221] 0.8848094012 -0.3185228555 -0.4789588144 -0.0010600737 -0.0161586475 -0.0678150011 0.1521520961 -0.1768306309 1.2783721864 0.0620769828
[231] 0.2100669845 -0.0159026621 0.6101100656 0.0011680776 0.2189853028 0.0912567570 NA -0.0883644792 0.3295117085 -0.4258848205
[241] 0.2308731527 -0.1509002157 0.0119094203 0.0897205972 -0.1786173542 -0.0146473151 -0.0670179012 0.0119094203 0.0126199302 -0.1560504468
[251] 0.4462692353 1.3608945589 -0.1039876267 0.0273959043 0.1853268201 0.0119561745 NA 0.2751959954 -0.2203731790 0.1492339568
[261] 0.0671960121 1.2662303645 0.5134495172 0.0794115505 -0.0151082641 -0.1656695909 -0.2382849307 -0.1481647287 0.0895364850 3.3967506681
[271] 0.2448758046 -0.0876199766 -0.0416913443 -0.4263902226 -0.6639064255 NA -0.0398985154 0.3413190681 -0.2542778552 1.2326930119
[281] 0.3201691100 -0.0639909335 -0.1794531460 0.2716127023 0.0443805002 -0.0509329198 0.2170124550 -0.0261647439 0.1892942924 -0.1228439337
[291] 0.3350162409 -0.2559736027 -0.1918837036 NA -0.0279479798 0.1199014036 -0.1627021937 0.2072422227 -0.0994447998 -0.1688804608
[301] 0.0838956816 -0.1744574903 -0.1360073724 1.6101390448 0.0828587678 -0.1956520271 -0.0194405438 -0.1538834455 -1.2261506560 -0.4897352041
[311] -0.0849792215 NA 0.4456924573 0.0639656811 -0.0633095141 0.2748623426 0.1061735811 0.0156643786 0.2281394844 0.1655978399
[321] 0.0740899624 -0.8174304518 -0.3304502907 NA 0.4381674039 1.0693060196 1.6738188659 -0.0178973006 NA 0.5167891552
[331] 0.0214663358 NA -0.0398924095 0.1264304623 -0.0805556587 -0.2669691640 2.6987852828 0.8458762442 -0.3435427666 NA
[341] 0.3788442891 -0.2071533512 0.1235201697 -0.0109961602 4.1990465649 0.3478637780 -0.2955957809 -0.1239793637 -0.7142583620 -1.8014892412
[351] NA 0.2413478652 -0.4569517169 -0.1177649992 -0.0205686435 -0.2201516927 -0.5516499029 -0.4809603981 -1.5375498352 -0.3397688016
[361] 0.0233923463 0.1968865308 0.0355299007 0.1968518540 -0.0070815809 -0.0623411943 -0.0661690417 -0.2287453956 NA 0.0899297293
[371] 1.5328626947 0.1384015402 -0.2536374335 0.1302929605 -0.1044272927 -0.6859649955 0.9957862231 1.4039833326 1.4606047333 0.1674775967
[381] 0.0216307234 0.0774940166 0.2837734699 0.0734038439 -0.7901434271 -0.1726234476 NA 1.1347531292 0.7417024565 0.3675678476
[391] 0.0990905765 -0.3257866307 -0.4083949151 -0.0585060489 0.0778076138 -0.0444850170 -0.4747065299 0.4334400046 NA -0.2368264467
[401] 1.7291793326 2.2459877502 2.0515690463 0.0813135515 1.1112010137 -0.0694340146 NA 0.4861321636 -0.5339995550 -0.3073541755
[411] 0.1830551153 1.1388425005 0.6373965564 -1.1519447186 0.3997939655 0.7496313587 0.0170666171 -0.0901086616 0.0174515673 6.0825224527
[421] 1.0374804207 0.5330845313 0.5599707699 -1.1868980012 0.3734818778 -0.0249844405 -0.0400193851 0.0765946325 -0.3934051462 -0.0333199125
[431] -0.1025861515 -0.7426112598 -0.9137830593 0.2162851830 -1.2058928658 0.4072823215 0.0245271060 0.3212239704 NA -1.1335563569
[441] 0.4499433243 -0.7071892837 0.1897514740 NA 0.7740914330 0.6622760181 -0.9966906813 0.9590621403 0.0576989037 -0.4036433615
[451] -0.4169255984 0.4283429500 -0.0514245558 2.0041641608 0.2921962366 -0.2336228925 0.0407321370 -0.1252669219 0.0308383080 -1.1897161515
[461] -0.0457162227 0.0010035612 0.6416295142 0.7463763997 -0.3184253105 -0.1617542625 -0.0953344623 -0.0312615561 -0.0377738697 0.2192702678
[471] 0.2709660096 -0.6382944919 0.4838602057 NA -0.3917149001 1.8950025796 3.0432548644 0.0964773557 -0.0312615561 1.8047582194
[481] -0.0359788524 NA 0.7770678671 -0.1045804424 0.3909365339 -0.6315151414 1.9154322905 0.5868935532 -0.4028347392 0.0015461319
[491] 0.6954094959 -0.0704703223 -0.0054492227 -0.0385257875 5.9764378928 0.7746990605 -0.3767955024 0.4013435286 -0.5313653203 1.2313473645
[501] 0.0517734823 0.2864852680 -0.4066168286 0.3646507961 -0.0222724899 0.4241365392 0.3102536813 -1.1798326249 -0.3528648982 0.1092132174
[511] 0.0574886505 0.1057767333 0.2667913145 0.0418994936 -0.4337570113 -0.0746507132 -0.8764927836 0.2323847913 NA 0.4183004710
[521] 1.8743123479 -0.6528575938 0.4954870346 0.2989164760 -0.0123309875 -0.6315728550 0.0585189932 0.1840405864 0.6202396806 0.2413952358
[531] 0.0188000389 NA -0.4194187452 -0.4084634004 -1.0831819168 -0.1219729805 0.0080505440 0.5144915873 0.7615909431 0.3378593465
[541] 0.1302606809 -0.3696920107 -0.0597733807 -0.1447975316 0.1897640634 0.0114384948 -2.4658866242 0.0320888507 0.0417694789 -0.5346940588
[551] 0.9331073253 1.2981502973 -0.0295653349 NA 0.3025106866 NA 0.0198818596 0.3828112320 0.0576483911 -0.4266665129
[561] 0.0294200975 0.4615553328 -0.2070550119 0.1050404890 NA 1.0248994111 -0.0063000148 0.1524382743 0.5045215987 3.4765952541
[571] 0.4267199321 0.7024105503 0.0366904790 -0.0583152399 0.0847556335 0.0956198065 0.1009777884 -0.0407589568 -0.2532911958 -0.3366872570
[581] -0.0269286117 0.1182304886 -0.9811192067 -0.0671406346 -0.4449178824 -0.6227497298 -0.0468210501 0.6639270775 -0.0220158831 -0.8727462646
[591] 0.2093033897 -0.3365405606 -0.3483385573 NA 0.1111836408 0.5349462787 -0.6202493057 0.0905520997 0.0089954599 -0.0947016399
[601] -0.3928772238 1.5967773657 -0.1884428711 2.5875015980 0.1178888507 -0.0324179045 0.0266308575 0.0068307633 NA -0.7371194145
[611] 0.0732763364 NA 0.5814939892 0.3245974424 0.2922258698 0.1334041638 -0.5649499261 NA 0.0141144000 -0.0430404256
[621] NA -1.2399062744 0.1533301204 0.0758655096 0.4352233053 1.6209084841 2.4395575398 -0.0198636821 NA 0.6353338798
[631] 0.0270303605 NA 0.1992726697 -0.1086317381 0.3488189880 0.5706822344 2.0054854989 0.3861776590 -0.0545962158 NA
[641] 0.5014610895 -0.0441108696 0.2318692366 -0.1696338634 5.0523272322 0.1433015653 0.1645050517 -0.0506583017 -1.3456452047 1.8399596163
[651] NA -0.0074403348 -0.1425522901 -0.4736806393 -0.3494373766 -0.1307795562 -0.0050505248 -0.3844405385 -1.4022083222 -0.3900211545
[661] -0.0938617337 -0.0115188772 -0.0820301317 0.0266308575 -1.1113923833 0.0697337215 -0.1022759752 0.0971017994 NA 0.5515065608
[671] 0.6196093029 -1.2713329413 0.7207443875 0.1525430885 -0.0422418113 0.0018393263 -0.2299428467 -0.0001400235 1.1018994802 0.0751551735
[681] 0.0206104869 NA -0.1019953698 -0.0090002793 0.0468708411 0.0001746455 NA 0.1579357035 -0.0245050546 0.0897748160
[691] 0.0320072250 -0.0906472536 NA -0.0166962512 -0.0457283346 NA -0.1798827162 0.1504659165 NA 0.2712450493
[701] 1.5476496957 1.6381030794 0.4035707167 NA 0.1541807902 0.0101232555 NA -0.0274963087 -0.2176498317 -0.0826622575
[711] -0.1569572237 1.6446890689 0.1896609916 -0.1168354228 0.0403094452 -0.1530337447 -0.0701085882 -0.1885589921 -0.1307226717 4.1098993249
[721] 0.7495029030 0.0755810183 0.0632340641 -0.3537128830 0.0719390225 NA 0.0634765699 -0.1871020629 -0.2456103431 0.0166325947
[731] -0.4491970942 0.0522146123 -0.2099839342 -1.0298093639 -0.5017633832 -0.0291461341 -0.0014216593 -0.2232038608 NA -0.4596302640
[741] NA -0.2334846215 -0.1840972313 NA 0.1122388004 1.3831381020 -0.0550382096 -0.0897637848 -0.0048513685 0.1214939516
[751] -0.0103102756 -0.0794008309 0.0025598704 1.1461026424 -0.0157379667 -0.0201854186 -0.0023192697 -0.0022213910 -0.0067371224 -0.0814212382
[761] -0.0016432872 -0.0022213910 0.1846511100 0.0181915126 0.0011476830 0.0124662316 -0.0139007225 -0.0019409335 0.0030619579 0.0436586450
[771] -0.0023192697 -0.0173037978 -0.0020440384 0.0017790926 0.0494770724 0.4936865481 1.0501704090 0.3175537894 -0.0024025061 -0.0563728394
[781] -0.0019674203 -0.0024025061 -0.0111357292 -0.0027054007 0.0278614436 0.0366895753 1.6614608447 0.0132893059 -0.0278922029 -0.0019674203
[791] -0.0229878749 0.0379960749 -0.0513882312 -0.0184288570 3.8150304590 0.0256521427 0.0177738493 -0.0079673234 -0.0228089862 0.0822745677
[801] 0.0147179773 -0.0074845395 0.0442381933 -0.1241337559 -0.0025180261 0.0314581620 0.0112338871 -0.0279362605 -0.0631768064 0.0417511516
[811] 0.0313326111 0.0005066221 0.0432510509 -0.0056891896 -0.0433051643 -0.0037015881 -0.0307942567 -0.1313831466 -0.0024225928 -0.0199008458
[821] 0.6840071642 0.3402666939 -0.0109765225 0.0024281440 -0.0047045126 0.0904081017 0.3094985081 0.0195604276 1.0183694177 -0.0797109374
[831] -0.0890131640 NA -0.0053644114 0.0082346461 0.2490034879 0.0386912120 NA 0.2203802051 0.3250134751 0.0554067761
[841] 0.0155983671 -0.1279210655 NA 0.0018987193 0.1807071952 -0.0035442829 -0.0303155552 -0.0197809458 NA 0.0083060812
[851] 0.7742678852 0.7046141956 0.0373557958 NA 0.1170834848 -0.0090006108 -0.0057302275 0.1405289347 -0.0217131722 -0.0956827718
[861] -0.1252047987 1.2865836187 0.0561128309 -0.0626327364 NA 0.2753064240 0.0282386439 0.0254438757 0.0035242263 1.4748853089
[871] 0.1121670250 -0.3409015957 -0.1269273798 -0.0098053784 -0.1254916580 NA 0.1248861116 0.1836117254 -0.1136938380 0.6441794407
[881] 0.1769139883 0.1062332294 -0.4830404817 0.0033096518 -0.0764173659 -0.1203818120 0.0132599574 0.0171184507 0.0047011673 -0.1273779519
[891] 0.0233074190 -0.0959015080 1.0186091092 NA 0.1359112257 1.2784511586 0.1808426306 -0.1942481932 0.0106061643 -0.0051559648
[901] -0.1683748140 -0.1885003685 -0.0022009228 0.2978718069 -0.0489228680 1.2049826435 NA -0.5752723662 -0.1419544862 0.0837502038
[911] 0.2764777224 NA -0.2839277786 0.7476206117 -0.0830035601 -0.3389472798 -0.5461883295 NA 0.0368853239 -0.3246807512
[921] -0.0869859665 -0.0852938653 -0.1916573656 NA -0.6883269801 0.0743897784 1.0458001787 -0.6056371800 0.0207569310 -0.5368263590
[931] -0.0183656361 NA 0.5152931595 -0.4689598250 -0.5665474200 -0.0987760257 0.7165078439 -0.0002858425 0.1152599191 NA
[941] 0.4912290227 -0.3985990344 -0.6448360930 0.6024612188 0.7419578311 -0.0520090704 -0.1216410329 0.0161877360 0.8507813171 -1.2261400507
[951] 0.0207569310 -0.0077459011 0.0391867890 -1.3454105317 0.0373852421 -1.3332793094 -0.0497480101 -1.0341861308 -1.9211930111 -0.5679198485
[961] -0.7489744036 0.0632835068 -0.4283508723 0.0605301065 -2.1943176289 0.1027177137 -0.5785574928 0.4812978977 NA 0.1287920818
[971] 0.2555590612 -0.6827035830 -0.2235709928 0.0264700175 -0.0292711270 -0.7150671519 2.0603393575 -0.9392297700 1.3733192637 -0.0500237516
[981] -0.3240926985 -3.4078194780 -0.8587558837 -1.7205624309 -0.1060496725 -0.3345062416 NA 0.3871556643 0.4763153029 0.2152028813
[991] -1.6675253269 0.4979144437 -0.3498117676 NA 1.1039383009 NA -1.2585460574 -0.0898289044 0.2186764963 -0.1671832635
[ reached getOption("max.print") -- omitted 1475 entries ]
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KERFU2VxMikKbGlicmFyeShnZ3B1YnIpCmBgYAoKYGBge3J9CmNvdW50cyA8LSByZWFkX3RzdigiLi4vLi4vYm9ub19oaXJvdGFfMjAyMC9zYWxtb25faHVtYW4xOC50c3YiKQpjb3VudHMKYGBgCgpgYGB7cn0KaG4yX2NoaXAgPC0gcmVhZF90c3YoIi4uLy4uL2Jvbm9faGlyb3RhXzIwMjAvaHVtYW4xOF9objJfQ2hJUC50c3YiKQpgYGAKYGBge3J9CnJuYV9kYXRhIDwtIHJlYWRfdHN2KCIuLi8uLi9ib25vX2hpcm90YV8yMDIwL3JuYXNlcV9odW1hbjE4LnRzdiIpCmZvcihpIGluIDI6bnJvdyhybmFfZGF0YSkpewogIGlmKGlzLm5hKHJuYV9kYXRhJGh1bWFuW2ldKSkKICAgIHJuYV9kYXRhJGh1bWFuW2ldIDwtIHJuYV9kYXRhJGh1bWFuW2ktMV0KfQpybmFfZGF0YSRkdXJhdGlvbltpcy5uYShybmFfZGF0YSRkdXJhdGlvbildIDwtICJ1bmtub3duIgpybmFfZGF0YSRgTzIgY29uY2VudHJhdGlvbmBbaXMubmEocm5hX2RhdGEkYE8yIGNvbmNlbnRyYXRpb25gKV0gPC0gInVua25vd24iCgpybmFfZGF0YV9wcyA8LSBybmFfZGF0YSAlPiUKICBzZWxlY3QoaHVtYW4sIHNhbXBsZSwgYE8yIGNvbmNlbnRyYXRpb25gLCBkdXJhdGlvbiwgYGh5cG94aWEoU1JSKWAsIGBub3Jtb3hpYShTUlIpYCkgJT4lCiAgdW5pdGUoMTo0LCBjb2wgPSAic2FtcGxlIiwgc2VwID0gIl8iKQoKbXVsdF9yZXAgPC0gcm5hX2RhdGEgJT4lCiAgZ3JvdXBfYnkoaHVtYW4sIHNhbXBsZSwgYE8yIGNvbmNlbnRyYXRpb25gLCBkdXJhdGlvbikgJT4lCiAgdGFsbHkoKSAlPiUKICBhcnJhbmdlKGRlc2MobikpICU+JQogIGZpbHRlcihuID4gMSkgJT4lCiAgdW5pdGUoMTo0LCBjb2wgPSAic2FtcGxlIiwgc2VwID0gIl8iKQoKcm5hX2RhdGFfcHMgJT4lCiAgZmlsdGVyKHNhbXBsZSAlaW4lIG11bHRfcmVwJHNhbXBsZSkgJT4lCiAgd3JpdGVfdHN2KCIuLi8uLi9ib25vX2hpcm90YV8yMDIwL3BzX2ZpbHRlcmVkX2RhdGEudHN2IikKYGBgCmBgYHtyfQpkZXNlcS5yZXMgPC0gcmVhZF9jc3YoIi9kYXRhMi8yMDIxX1JvbmdvL2RhdGFfZnJhbWVzL2Rlc2VxX3Jlc3VsdHMuY3N2IikKZGVzZXEucmVzIDwtIGRlc2VxLnJlcyAlPiUKICBzZXBhcmF0ZShjb2wgPSBzYW1wbGVzLCBpbnRvID0gYygiZGF0YSIsICJjZWxsLnR5cGUiLCAiY29uZGl0aW9uIiwgImR1cmF0aW9uIiksIHNlcCA9ICJfIiwgcmVtb3ZlID0gRikgJT4lCiAgc2VsZWN0KC1jKHNhbXBsZXMsIGxmY1NFKSkKCmBgYAoKIyMgaHVtYW4gb3J0aG9sb2dzCmBgYHtyfQp0Zi5oaXRzIDwtIHJlYWRfeGxzeCgiLi4vZGF0YS84MyBkaXJlY3QgdGFyZ2V0cyB0aGF0IGhhdmUgaHVtYW4gaG9tb2xvZ3MueGxzeCIpCnRmLmhpdHMgPC0gdGYuaGl0cyAlPiUgZmlsdGVyKGBIdW1hbiBPcnRob2xvZ2AgIT0gIk4uQS4iKSAjIFJlbW92ZSBnZW5lcyB3aXRoIG5vIGh1bWFuIG9ydGhvbG9ncwp0Zi5oaXRzJEVOU0cgPC0gc2FwcGx5KHN0cnNwbGl0KHRmLmhpdHMkYEh1bWFuIE9ydGhvbG9nYCwgIiAiKSwgYFtbYCwgMSkKb3J0aG8gPC0gdGYuaGl0cyAlPiUKICBzZWxlY3QoRU5TRykgJT4lCiAgZGlzdGluY3QoKQoKZ2VuZXMuZGVzZXEgPC0gY291bnRzICU+JSAKICBzZWxlY3QoR2VuZU5hbWUpICU+JSAKICBkcGx5cjo6cmVuYW1lKEdlbmUgPSBHZW5lTmFtZSkKCmdlbmUuaWQgPC0gcmVhZF90c3YoIi4uLy4uL2Jvbm9faGlyb3RhXzIwMjAvMTcwNzA0YWxsX0hOMi50eHQiKSAlPiUKICBzZWxlY3QoRU5TR19HZW5lKSAlPiUKICBzZXBhcmF0ZShFTlNHX0dlbmUsIGludG8gPSBjKCJFTlNHIiwgIkdlbmUiKSwgc2VwID0gIl8iLCBleHRyYSA9ICJtZXJnZSIpCgpmaW5hbC5vcnRobyA8LSBsZWZ0X2pvaW4oZ2VuZXMuZGVzZXEsIGdlbmUuaWQsIGJ5ID0gIkdlbmUiKSAlPiUKICBsZWZ0X2pvaW4ob3J0aG8sIC4sIGJ5ID0gIkVOU0ciKSAlPiUKICBmaWx0ZXIoIWlzLm5hKEdlbmUpKSAlPiUKICBhcnJhbmdlKEdlbmUpIAoKYGBgCgojIyBQZXJjZW50aWxlIG9mIG9ydGhvbG9ncyBpbiBnZW5lIGV4cHJlc3Npb24gY2hhbmdlcwpgYGB7cn0KZWNkZl9mdW4gPC0gZnVuY3Rpb24oZGF0YSwgZ2VuZXMpIHsKICB4IDwtIGRhdGEkbG9nMkZvbGRDaGFuZ2UKICBwZXJjIDwtIGRhdGEkbG9nMkZvbGRDaGFuZ2VbZGF0YSRnZW5lX25hbWUgJWluJSBnZW5lc10KICBvdXQgPC0gZWNkZih4KShwZXJjKQogIG5hbWVzKG91dCkgPC0gZ2VuZXMKICByZXR1cm4ob3V0KQogIH0KCnBlcmMub3J0aG8gPC0gZGVzZXEucmVzICU+JQogIGFycmFuZ2Uoc2FtcGxlcywgZ2VuZV9uYW1lKSAlPiUKICBncm91cF9ieShzYW1wbGVzLCBkYXRhLCBjZWxsLnR5cGUsIGNvbmRpdGlvbiwgZHVyYXRpb24pICU+JQogIGdyb3VwX21vZGlmeSh+IGVjZGZfZnVuKGRhdGEgPSAuLCBnZW5lcyA9IGZpbmFsLm9ydGhvJEdlbmUpICU+JQogICAgICAgICAgICAgICAgIGVuZnJhbWUobmFtZSA9ICJHZW5lIiwgdmFsdWUgPSAicXVhbnRpbGUiKSkKCnBlcmMub3J0aG8KCndyaXRlX2NzdihkZXNlcS5yZXMsIGd6ZmlsZSgiLi4vb3V0cHV0L3RhYmxlcy9odW1hbl9oeXBveGlhX2RpZmZfZXhwcmVzc2lvbi5jc3YuZ3oiKSkKd3JpdGVfY3N2KHBlcmMub3J0aG8sICIuLi9vdXRwdXQvdGFibGVzL3dvcm1fb3J0aG9sb2dzX2h1bWFuX2h5cG94aWFfcGVyY2VudGlsZS5jc3YiKQpgYGAKCmBgYHtyfQpwZXJjLm9ydGhvICU+JSAKICBmaWx0ZXIoR2VuZSA9PSAiQUNTRjMiKSAlPiUKICBncm91cF9ieShkdXJhdGlvbikgJT4lCiAgdGFsbHkoKQpgYGAKCmBgYHtyIGZpZy53aWR0aD0yMCwgZmlnLmhlaWdodD0xNX0Kb3J0aG8ucGVyYy4xIDwtIGdncGxvdChwZXJjLm9ydGhvLCBhZXMocXVhbnRpbGUpKSArCiAgZ2VvbV9kZW5zaXR5KCkgKwogIGZhY2V0X3dyYXAofkdlbmUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgdGhlbWVfcHVicigpCgpvcnRoby5wZXJjLjEgCgpvcnRoby5wZXJjLjIgPC0gZ2dwbG90KHBlcmMub3J0aG8sIGFlcyhxdWFudGlsZSwgZmlsbCA9IGR1cmF0aW9uKSkgKwogIGdlb21faGlzdG9ncmFtKCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZmFjZXRfd3JhcCh+R2VuZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICB0aGVtZV9wdWJyKCkKCm9ydGhvLnBlcmMuMiAKCm9ydGhvLnBlcmMuMyA8LSBnZ3Bsb3QocGVyYy5vcnRobywgYWVzKHF1YW50aWxlLCBmaWxsID0gY29uZGl0aW9uKSkgKwogIGdlb21faGlzdG9ncmFtKCkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgZmFjZXRfd3JhcCh+R2VuZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICB0aGVtZV9wdWJyKCkKCm9ydGhvLnBlcmMuMyAKCmdnc2F2ZShvcnRoby5wZXJjLjEsIGZpbGVuYW1lID0gIi4uL291dHB1dC9wbG90cy9wbG90LmRpc3QucGVyY2VudGlsZS5odW1hbi5oeXBveGlhLm9ydGhvbG9nLnBkZiIsIHdpZHRoID0gMjAsIGhlaWdodCA9IDE1KQpnZ3NhdmUob3J0aG8ucGVyYy4yLCBmaWxlbmFtZSA9ICIuLi9vdXRwdXQvcGxvdHMvcGxvdC5oaXN0LnBlcmNlbnRpbGUuZHVyYXRpb24uaHVtYW4uaHlwb3hpYS5vcnRob2xvZy5wZGYiLCB3aWR0aCA9IDIwLCBoZWlnaHQgPSAxNSkKZ2dzYXZlKG9ydGhvLnBlcmMuMywgZmlsZW5hbWUgPSAiLi4vb3V0cHV0L3Bsb3RzL3Bsb3QuaGlzdC5wZXJjZW50aWxlLmNvbmRpdGlvbi5odW1hbi5oeXBveGlhLm9ydGhvbG9nLnBkZiIsIHdpZHRoID0gMjAsIGhlaWdodCA9IDE1KQpgYGAKCmBgYHtyfQp0bXAgPC0gZGVzZXEucmVzICU+JQogIGZpbHRlcihncmVwbCgiUENLMSIsIGdlbmVfbmFtZSkpICU+JQogIHNlcGFyYXRlKGNvbCA9IHNhbXBsZXMsIGludG8gPSBjKCJkYXRhIiwgImNlbGwudHlwZSIsICJjb25kaXRpb24iLCAiZHVyYXRpb24iKSwgc2VwID0gIl8iLCApCnRtcApkZXNlcS5yZXMgJT4lCiAgZmlsdGVyKGdyZXBsKCJQQ0sxIiwgZ2VuZV9uYW1lKSkgJT4lCiAgZ2dwbG90KC4sIGFlcyhiYXNlTWVhbiwgbG9nMkZvbGRDaGFuZ2UsIGNvbCA9IHBhZGogPCAwLjA1KSkgKwogIGdlb21fcG9pbnQoKSArCiAgc2NhbGVfeF9sb2cxMCgpCmBgYAoKCgoKCgoKCgoKCgoKYGBge3J9CgpgYGAKCgoKCgpgYGB7cn0KZDIkbG9nMkZvbGRDaGFuZ2VbZDIkZ2VuZV9uYW1lICVpbiUgdGYuaGl0cyRHZW5lXQpgYGAKCg==